/**
 * PriorityQueue.java
 * Autor: Jennifer Pamela Valdez Cabrera
 * Carne: 10189
 * Fecha de entrega: 8 de octubre de 2011
 * Descripcion: Es la interfaz que se implementara para la cola de prioridad
 * @author Jennifer Valdez
 */

public interface PriorityQueue<E extends Comparable<E>>{
    
    /**
     * Obtiene el valor menor de la cola, la cual es la raiz.
     * Pre: no debe estar vacio
     * Post: devuelve el valor menor en la cola de prioridad
     * @return devuelve el valor menor de la Cola de Prioridad
     */
    public E getFirst();

    /**
     * Elimina el valor menor de la cola de priridad
     * Pre: no debe estar vacia
     * Post: remueve y devuelve el valor menor de la cola
     * @return devuelve el valor menor de la cola
     */
    public E remove();


    /**
     * Agrega un elemento a la cola y ordena la cola por prioridad
     * Pre: el objeto no es nulo
     * Post: el valor es agregado a la cola ordenadamente
     * @param value es el objeto generico que se agrega a la cola
     */
    public void add(E value);

    /**
     * Indica si la cola se encuentra vacia
     * Post: regresa si la cola se encuentra vacia
     * @return devuelve true si esta vacia y false si posee al menos un elemento
     */
    public boolean isEmpty();

    /**
     * Obtiene el tamaño de la cola
     * Post: regresa el numero de elementos en la cola
     * @return devuelve el numero de la cantidad de elementos de la cola
     */
    public int size();

    /**
    * Post: remueve todos los elementos de la cola
    */
    public void clear();    
}
